package cn.edu.ncut.cs.springboot.mybatisplusemployee.utils;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;

import com.baomidou.mybatisplus.generator.config.OutputFile;

import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.Collections;

public class MybatisPlusGenerator {
    public static void main(String[] args) {
        String projectPath = "E:/springboot2/mybatisplus-employee";
        String databaseUrl = "jdbc:mysql://localhost:3306/springsecurity?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC";
        String username = "root";
        String password = "123456";
        String author = "ncut";
        String parentPackage = "cn.edu.ncut.cs.springboot.mybatisplusemployee";
        String[] tableNames = {"employees", "user", "user_role", "role", "role_permission", "permission","attendance","salary"};
        // 使⽤ FastAutoGenerator 配置⽣成器

        FastAutoGenerator.create(databaseUrl, username, password)
                // 1. 全局配置

                .globalConfig(builder -> builder

                                .author(author) // 设置作者

                                .outputDir(projectPath + "/src/main/java") // 输出⽬录

                                .disableOpenDir() // 禁⽌打开输出⽬录

                                .commentDate("yyyy-MM-dd") // 注释中的⽇期格式

                )
                // 2. 包配置

                .packageConfig(builder -> builder

                        .parent(parentPackage) // 设置⽗包名

                        .pathInfo(Collections.singletonMap(OutputFile.xml,projectPath + "/src/main/resources/mapper")) // 设置 XML ⽣成路径

                )
                // 3. 策略配置

                .strategyConfig(builder -> builder

                        .addInclude(tableNames) // 设置需要⽣成的表

                        .addTablePrefix("") // 表名前缀过滤（这⾥留空）

                        .entityBuilder() // 实体类配置
                                .naming(NamingStrategy.underline_to_camel) // 数据库表名映射到实体类采⽤驼峰命名

                                .columnNaming(NamingStrategy.underline_to_camel)// 数据库字段名映射到属性名采⽤驼峰命名

                                .enableLombok() // 开启 Lombok

                                .controllerBuilder() // Controller 配置

                                .enableRestStyle() // 开启 @RestController 注解

                                .mapperBuilder() // Mapper 配置

                                .enableBaseColumnList() // ⽣成 BaseColumnList

                                .enableBaseResultMap() // ⽣成 BaseResultMap

                )
                // 4. 模板引擎配置（默认 Velocity，可选 Freemarker 或 Beetl）
                .templateEngine(new VelocityTemplateEngine())
                .execute(); // 执⾏⽣成器

    }
}
